<?php
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

//$teste = setlocale(LC_ALL, "ptb_bra");

include_once 'abstract_dao.php';
include_once 'model_carga.php';

class dao_carga extends abstract_dao{
    
    
    /**
     *
     * @param model_carga $dados
     * @return int ID da carga cadastrada 
     */
    public function insert(model_carga $dados){
        $sql = "INSERT INTO `carga`(`CLI_ID`,`CID_ORIGEM_ID`, `CID_DESTINO_ID`, `CAR_PRODUTO`, `CAR_VEICULO`,
            `CAR_ESPECIE`, `CAR_VALOR`, `CAR_CARROCERIA`, `CAR_OBSERVACAO`, `CAR_RASTREADO`, `CAR_PESO`, `CAR_DATA_REGISTRO`, `CAR_DH_VALIDADE`)
            VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, CURDATE(), DATE_ADD(CURDATE(), INTERVAL '6 23:59:59' DAY_SECOND)) ";
                
        $stmt = $this->pdo->prepare($sql);

        
        $sucesso = $stmt->execute(array ( $dados->CLI_ID, $dados->CID_ORIGEM_ID, $dados->CID_DESTINO_ID, $dados->CAR_PRODUTO,
            $dados->CAR_VEICULO, $dados->CAR_ESPECIE, $dados->CAR_VALOR, $dados->CAR_CARROCERIA, $dados->CAR_OBSERVACAO,
            $dados->CAR_RASTREADO, $dados->CAR_PESO));
        
        if ($sucesso){
            return $this->pdo->lastInsertId();
        }else{
            throw new DAOException ("Erro ao inserir carga. A Prepared Statement nao pode ser executada.");
        }
    }

    
    /**
     *
     * @param model_carga $dados
     * @return int  
     */
    public function update(model_carga $dados){
        $sql = "UPDATE `carga` SET `CID_ORIGEM_ID` = ?, `CID_DESTINO_ID` = ?, `CAR_PRODUTO` = ?, `CAR_VEICULO` = ?, `CAR_ESPECIE` = ?,
                `CAR_VALOR` = ?, `CAR_CARROCERIA` = ?, `CAR_OBSERVACAO` = ?, `CAR_RASTREADO` = ?, `CAR_PESO` = ? WHERE `CAR_ID` = ?";
        
        $stmt = $this->pdo->prepare($sql);
        
        $sucesso = $stmt->execute(array ( $dados->CID_ORIGEM_ID, $dados->CID_DESTINO_ID, $dados->CAR_PRODUTO, $dados->CAR_VEICULO, $dados->CAR_ESPECIE,
            $dados->CAR_VALOR, $dados->CAR_CARROCERIA, $dados->CAR_OBSERVACAO, $dados->CAR_RASTREADO, $dados->CAR_PESO, $dados->CAR_ID));
        
        if($sucesso){
            return $dados->CAR_ID;
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao atualizar a carga. A Prepared Statement nao pode ser executada.");
        }
    }
    
    /**
     *
     * @param type $CAR_ID Id da carga a ser consultada
     * @return model_carga Model com os dados consultados
     */
    public function select($CAR_ID){
        $retorno = null;
        $sql_select = "SELECT * FROM `vw_carga` WHERE `CAR_ID` = ?";
        
        $stmt = $this->pdo->prepare($sql_select);
        
        if ($stmt->execute(array($CAR_ID))){
            while($dados = $stmt->fetch(PDO::FETCH_ASSOC)){
                $retorno = new model_carga();
                $retorno->populateFromBanco($dados);
            }
        }
        return $retorno;
    }
    
    public function finalizar($CAR_ID){
        
        $sql = "UPDATE `carga` SET `CAR_DH_VALIDADE` = NOW() WHERE `CAR_ID` = ?";
        
        $stmt = $this->pdo->prepare($sql);
        
        $sucesso = $stmt->execute(array($CAR_ID));
        
        if($sucesso){
            return $CAR_ID;
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao finalizar carga. A Prepared Statement nao pode ser executada.");
        }
    }
    
    public function excluir($CAR_ID){
        
        $sql = "DELETE FROM `carga` WHERE `CAR_ID` = ?";;
        
        $stmt = $this->pdo->prepare($sql);
        
        $sucesso = $stmt->execute(array($CAR_ID));
        
        if($sucesso){
            return $CAR_ID;
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao finalizar carga. A Prepared Statement nao pode ser executada.");
        }
    }
    
    public function prorrogar($CAR_ID){
        
        $sql = "UPDATE `carga` SET `CAR_DH_VALIDADE` = DATE_ADD(CURDATE(), INTERVAL '6 23:59:59' DAY_SECOND) WHERE `CAR_ID` = ?";
        
        $stmt = $this->pdo->prepare($sql);
        
        $sucesso = $stmt->execute(array($CAR_ID));
        
        if($sucesso){
            return $CAR_ID;
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao finalizar carga. A Prepared Statement nao pode ser executada.");
        }
    }
    
    public function estaFinalizada($CAR_ID){
        
        $sql = "SELECT CAR_FINALIZADA FROM vw_carga WHERE CAR_ID = ?";
        
        $stmt = $this->pdo->prepare($sql);
        
        $sucesso = $stmt->execute(array($CAR_ID));
        
        if($sucesso){
            while($dados = $stmt->fetch(PDO::FETCH_ASSOC)){
                return $dados["CAR_FINALIZADA"];
            }
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao verificar finaliza&ccedil;&aacute;o da carga.");
        }
    }
    
    /**
     * Consulta o cli_id de uma determinada carga.
     * Ajuda a checar se um cliente pode alterar uma determinada carga.
     * @param int $CAR_ID Codigo da carga
     * @return int CLI_ID Codigo do cliente dono do proprietario 
     */
    public function selectCLI_ID($CAR_ID){
        $sql = "SELECT `CLI_ID` FROM `carga` WHERE `CAR_ID` = ?";
        
        $stmt = $this->pdo->prepare($sql);
        
        if($stmt->execute(array($CAR_ID))){
            $rs = $stmt->fetch(PDO::FETCH_ASSOC);
            return $rs["CLI_ID"];
        }else{
            var_dump ($stmt->errorInfo());
            throw new DAOException ("Erro ao checar proprietario. A Prepared Statement nao pode ser executada.");
        }
    }
}

?>
